/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._303;

/**
 *
 * 给定一个整数数组  nums，求出数组从索引 i 到 j  (i ≤ j) 范围内元素的总和，包含 i,  j 两点。
 *
 * 示例：
 *
 * 给定 nums = [-2, 0, 3, -5, 2, -1]，求和函数为 sumRange()
 *
 * sumRange(0, 2) -> 1
 * sumRange(2, 5) -> -1
 * sumRange(0, 5) -> -3
 * 说明:
 *
 * 你可以假设数组不可变。
 * 会多次调用 sumRange 方法。
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._303
 * @ClassName: NumArray
 * @Author: linyaonan
 * @Date: 2019/12/20 17:56
 */
public class NumArray {

    private int[] numArray;

    public NumArray(int[] nums) {
        numArray = new int[nums.length + 1];
        numArray[0] = 0;
        for (int i = 1; i <= nums.length; i++) {
            numArray[i] = numArray[i - 1] + nums[i - 1];
        }
    }

    public int sumRange(int i, int j) {
        i = Math.max(0, i);
        j = Math.min(numArray.length - 1, j + 1);
        if (i > j) {
            return 0;
        }
        return numArray[j] - numArray[i];
    }

}
